package cn.cleanarch.infra.idp.pms.domain.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import cn.cleanarch.infra.idp.database.entity.DBModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 设计文件实体类
 */
@Data
@ToString
@EqualsAndHashCode(callSuper = true)
@TableName("t_design_file")
public class DesignFile extends DBModel {

    /**
     * 文件名
     */
    @TableField("name")
    @Length(max = 200)
    private String name;

    /**
     * 文件描述
     */
    @TableField("description")
    @Length(max = 1000)
    private String description;

    /**
     * 文件键名(存储路径)
     */
    @TableField("file_key")
    @Length(max = 500)
    private String fileKey;

    /**
     * 文件大小(字节)
     */
    @TableField("file_size")
    private Long fileSize;

    /**
     * 文件类型
     */
    @TableField("file_type")
    @Length(max = 50)
    private String fileType;

    /**
     * 文件MD5
     */
    @TableField("file_md5")
    @Length(max = 64)
    private String fileMd5;

    /**
     * 文件版本
     */
    @TableField("version")
    @Length(max = 20)
    private String version;

    /**
     * 文件状态(NORMAL:正常, DELETED:已删除)
     */
    @TableField("status")
    @Length(max = 20)
    private String status;

    /**
     * 使用状态(UNUSED:未使用, USED:已使用)
     */
    @TableField("used_status")
    @Length(max = 20)
    private String usedStatus;

    /**
     * 安全状态(UNSCANNED:未扫描, SAFE:安全, UNSAFE:不安全)
     */
    @TableField("security_status")
    @Length(max = 20)
    private String securityStatus;

    /**
     * 最后访问时间
     */
    @TableField("last_access_time")
    private Long lastAccessTime;

    /**
     * 所有者ID
     */
    @TableField("owner_id")
    private Long ownerId;

    /**
     * 删除时间
     */
    @TableField("deleted_at")
    private Long deletedAt;

    /**
     * 存储状态(UPLOADING:上传中, STORED:已存储, FAILED:上传失败)
     */
    @TableField("storage_status")
    @Length(max = 20)
    private String storageStatus;

    /**
     * 项目ID（与项目绑定）
     */
    @TableField("project_id")
    private Long projectId;

    /**
     * 创建者ID
     */
    @TableField("created_by")
    private Long createdBy;

    /**
     * 更新者ID
     */
    @TableField("updated_by")
    private Long updatedBy;

    /**
     * 当前版本ID（指向t_design_file_version表的主键）
     */
    @TableField("current_version_id")
    private Long currentVersionId;

    /**
     * 标签ID列表(非数据库字段，用于JSON转换)
     */
    @TableField(exist = false)
    private List<Long> tags;

}
